package meow

import grails.test.*

class StatusTests extends GrailsUnitTestCase {
  protected void setUp() {
    super.setUp()
  }

  protected void tearDown() {
    super.tearDown()
  }

  void testReplies_宛先がない() {
    assertReplies([], "何にもない")
  }

  void testReplies_末尾がEOL() {
    assertReplies(['foo'], "@foo")
  }

  void testReplies_宛先の区切がない() {
    assertReplies(['boo'], "@foo@bar@boo")
  }

  void testReplies_正しい区切付きの複数の宛先() {
    assertReplies(['foo', 'bar', 'boo'], "@foo @bar @boo")
  }

  void testReplies_区切文字が間違っている複数の宛先() {
    assertReplies(['boo'], "@foo, @bar, @boo")
  }

  void testReplies_重複する宛先が複数ある() {
    assertReplies(['foo', 'bar'], "@foo xxxx @bar yyyy @foo")
  }

  void testReplies_アットマークが連続している() {
    assertReplies(['foo'], "@@@foo xxx")
  }

  void testReplies_メールアドレスを誤認しない() {
    assertReplies([], "masanobu.imai@unisys.co.jp")
  }

  void testReplies_アットマークのみ() {
    assertReplies([], "@")
  }

  void testReplies_usernameの下限1文字ギリギリ() {
    assertReplies(['a'], "@a")
  }

  void testReplies_usernameの上限20文字ギリギリ() {
    assertReplies(['12345678901234567890'], "@12345678901234567890")
  }

  void testReplies_usernameの上限20文字を超過している() {
    assertReplies([], "@12345678901234567890a")
  }

  void testReplies_AccountのNGリストを宛先にする() {
    assertReplies([], "@" + Account.ngLists.join(" @"))
  }



  def assertReplies(expect, message) {
    assertEquals(expect as Set, new Status(message: message).replies() as Set)
  }
}
